package x.zero.conf;

import com.zaxxer.hikari.HikariDataSource;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import javax.sql.DataSource;

@Configuration
@Data
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public class DataSourceConfig {
    private Integer minimumIdle; // 最小空闲连接数量
    private Integer idleTimeout; // 空闲连接存活最大时间，默认600000（10分钟）
    private Integer maximumPoolSize; // 连接池最大连接数，默认是10
    private Boolean autoCommit; // 此属性控制从池返回的连接的默认自动提交行为,默认值：true
    private Integer maxLifetime; // 此属性控制池中连接的最长生命周期，值0表示无限生命周期，默认1800000即30分钟
    private Long connectionTimeout; // 数据库连接超时时间,默认30秒，即30000

    @Bean(name="datasource")//beetlSqlDataSource
    public DataSource datasource(Environment env) {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl(env.getProperty("spring.datasource.url"));
        ds.setUsername(env.getProperty("spring.datasource.username"));
        ds.setPassword(env.getProperty("spring.datasource.password"));
        ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
        ds.setMinimumIdle(minimumIdle);
        ds.setIdleTimeout(idleTimeout);
        ds.setMaximumPoolSize(maximumPoolSize);
        ds.setAutoCommit(autoCommit);
        ds.setMaxLifetime(maxLifetime);
        ds.setConnectionTimeout(connectionTimeout);
        return ds;
    }
}
